package com.yifeng.repo.micro.service.server.engine.configure;

import com.google.common.collect.Lists;
import com.yifeng.repo.base.security.context.params.SecurityCheckParam;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

import java.util.List;

/**
 * Created by daibing on 2023/3/17.
 */
@Data
@ConfigurationProperties(prefix = ServerEngineRequestProperties.PREFIX)
public class ServerEngineRequestProperties {

    public static final String PREFIX = "yfcloud.micro.service.engine.request";

    /**
     * 是否启用微引擎请求组件
     */
    private boolean enabled = true;

    /**
     * 请求上下文：拷贝头前缀
     */
    private List<String> copyHeaderPrefixes = Lists.newArrayList("x-");

    /**
     * 打印请求响应时长
     */
    private boolean enablePrintRequestCostTime = false;

    /**
     * 是否启用鉴权，支持鉴权sdk
     */
    private boolean enableSecurity = true;

    /**
     * 启用鉴权后的匹配url地址
     */
    private List<String> securityUrlPatterns = Lists.newArrayList("/*");

    /**
     * 启用鉴权后的排除uri地址
     */
    private List<String> securityExcludeUris = Lists.newArrayList("/*/login/**");

    /**
     * 账号中心的SecurityCheck配置（2B鉴权）
     */
    @NestedConfigurationProperty
    private SecurityCheckParam accountSecurityCheckParam;

    /**
     * 会员中心的SecurityCheck配置（2C鉴权）
     */
    @NestedConfigurationProperty
    private SecurityCheckParam customerSecurityCheckParam;

    /**
     * 供应链的SecurityCheckParam配置（2S鉴权）
     */
    @NestedConfigurationProperty
    private SecurityCheckParam supplySecurityCheckParam;

    /**
     * 兼容老业务引入配置允许无token通行（仅支持2B鉴权）
     */
    @Deprecated
    private boolean allowPassByNonToken = true;

    /**
     * 启用鉴权后检查接口权限（仅支持2B鉴权）
     */
    @Deprecated
    private boolean securityCheckApiPermission = false;

    /**
     * 启用鉴权后是否加载数据权限（仅支持2B鉴权）
     */
    @Deprecated
    private boolean securityLoadDataPermission = false;

    /**
     * 检查权限失败直接返回应用级别默认配置（仅支持2B鉴权）
     */
    @Deprecated
    private boolean successIfCheckSecuredException = false;

    /**
     * 【谨慎使用】是否启用JsonRequest，支持openx请求模式
     */
    private boolean enableJsonRequest = false;

    /**
     * 【谨慎使用】启用JsonRequest后的匹配url地址
     */
    private List<String> jsonRequestUrlPatterns = Lists.newArrayList("/*");

    /**
     * 【谨慎使用】启用JsonRequest后的排除uri地址，不对POST方法做请求体做wrapper
     */
    private List<String> jsonRequestExcludeUris = Lists.newArrayList("/*/controller/**", "/*/callback/**");

}
